Угнежђено гранање
У задацима који следе користи се угнежђено гранање (наредбе гранања су наведене унутар тела ширих наредби гранања).
Елементи програмског језика
Уколико је потребно извршити гранање на основу неколико међусобно
искључујућих услова, то можемо да урадимо коришћењем
конструкције else-if, која има следећи општи
облик:
if (uslov1)
naredba1
else if (uslov2)
naredba2
else if (uslov3)
naredba3
...
else
naredbakПриликом извршавања ове наредбе проверавају се редом услови
uslov1, uslov2 итд. све док се не наиђе на
неки услов који је испуњен и чији се блок наредби извршава. Последња
else ставка се извршава ако ниједан од услова није испуњен.
Тај део је опцион и не мора се навести.
Напоменимо да би на основу уобичајеног назубљивања наредби
if-else кôд требало да буде назубљен на следећи начин:
if uslov1
naredba1
else
if uslov2
naredba2
else
if ...
...
else
naredbakзато што је доња наредба if-else угнежђена у горњу
if-else наредбу и део је њене else гране.
Ипак, else-if конструкција се користи прилично често и
назубљује на горе приказани начин да би се нагласило да су све три гране
у њој равноправне.
Поменимо једну важну појаву познату као висеће else (енг. dangling else). Уколико имамо угнежђено гранање облика:
if (uslov1)
if (uslov2)
naredba1
else
naredba2поставља се питање за коју if наредбу се везује
else ставка: за прву или другу? С обзиром да преводилац не
може да погоди шта је програмер имао на уму, ово питање се регулише
правилом које гласи: еlse ставка се везује за последњу
(дакле најближу) if наредбу, те би у претходном случају
исправно форматирање било:
if (uslov1)
if (uslov2)
naredba1
else
naredba2Уколико желимо да постигнемо да се else веже за прву
if наредбу, то можемо постићи увођењем витичастих заграда и
одговарајућим груписањем:
if (uslov1) {
if (uslov2)
naredba1
}
else
naredba2Уколико је потребно извршити гранање на основу неких конкретних
вредности можемо искористити наредбу switch-case која има
наредни облик:
switch (izraz) {
case vrednost_1:
naredbe_1;
break;
case vrednost_2:
naredbe_2;
break;
...
case vrednost_k;
naredbe_k;
break;
default:
naredbe_d;
}Приликом извршавања ове наредбе, редом се проверава да ли је вредност
израза izraz једнакa некој од наведених вредности. Уколико
израз има неку од наведених вредности, извршава се наредба (или блок
наредби) наведен након те вредности и након тога се излази из наредбе
switch-case. Ако бисмо заборавили да наведемо ставку
break онда би се извршиле све наредбе које одговарају
случају за дату вредност израза и након тога све наредне наредбе (за
вредности наведене након те у наредби switch-case).
Последња ставка default је опциона и означава случај када
израз није једнак ниједној од наведених вредности.
Ако је блок наредби које треба извршити исти за неке различите
вредности које су наведене унутар наредбе switch-case, онда
се оне могу груписати на следећи начин:
switch (izraz) {
case vrednost_1: vrednost_2: vrednost_3:
naredbe_1;
break;
case vrednost_4: vrednost_5:
naredbe_2;
break;
default:
naredbe_d;
}Израз чија се вредност тестира може бити целобројног типа, али и типа
bool, типа string и набројивог типа
enum (о тим типовима биће више речи касније).
Угнежђено гранање
У задацима који следе користи се угнежђено гранање (наредбе гранања су наведене унутар тела ширих наредби гранања).
Елементи програмског језика
Уколико је потребно извршити гранање на основу неколико међусобно
искључујућих услова, то можемо да урадимо коришћењем
конструкције else-if, која има следећи општи
облик:
if (uslov1)
naredba1
else if (uslov2)
naredba2
else if (uslov3)
naredba3
...
else
naredbakПриликом извршавања ове наредбе проверавају се редом услови
uslov1, uslov2 итд. све док се не наиђе на
неки услов који је испуњен и чији се блок наредби извршава. Последња
else ставка се извршава ако ниједан од услова није испуњен.
Тај део је опцион и не мора се навести.
Напоменимо да би на основу уобичајеног назубљивања наредби
if-else кôд требало да буде назубљен на следећи начин:
if uslov1
naredba1
else
if uslov2
naredba2
else
if ...
...
else
naredbakзато што је доња наредба if-else угнежђена у горњу
if-else наредбу и део је њене else гране.
Ипак, else-if конструкција се користи прилично често и
назубљује на горе приказани начин да би се нагласило да су све три гране
у њој равноправне.
Поменимо једну важну појаву познату као висеће else (енг. dangling else). Уколико имамо угнежђено гранање облика:
if (uslov1)
if (uslov2)
naredba1
else
naredba2поставља се питање за коју if наредбу се везује
else ставка: за прву или другу? С обзиром да преводилац не
може да погоди шта је програмер имао на уму, ово питање се регулише
правилом које гласи: еlse ставка се везује за последњу
(дакле најближу) if наредбу, те би у претходном случају
исправно форматирање било:
if (uslov1)
if (uslov2)
naredba1
else
naredba2Уколико желимо да постигнемо да се else веже за прву
if наредбу, то можемо постићи увођењем витичастих заграда и
одговарајућим груписањем:
if (uslov1) {
if (uslov2)
naredba1
}
else
naredba2Уколико је потребно извршити гранање на основу неких конкретних
вредности можемо искористити наредбу switch-case која има
наредни облик:
switch (izraz) {
case vrednost_1:
naredbe_1;
break;
case vrednost_2:
naredbe_2;
break;
...
case vrednost_k;
naredbe_k;
break;
default:
naredbe_d;
}Приликом извршавања ове наредбе, редом се проверава да ли је вредност
израза izraz једнакa некој од наведених вредности. Уколико
израз има неку од наведених вредности, извршава се наредба (или блок
наредби) наведен након те вредности и након тога се излази из наредбе
switch-case. Ако бисмо заборавили да наведемо ставку
break онда би се извршиле све наредбе које одговарају
случају за дату вредност израза и након тога све наредне наредбе (за
вредности наведене након те у наредби switch-case).
Последња ставка default је опциона и означава случај када
израз није једнак ниједној од наведених вредности.
Ако је блок наредби које треба извршити исти за неке различите
вредности које су наведене унутар наредбе switch-case, онда
се оне могу груписати на следећи начин:
switch (izraz) {
case vrednost_1: vrednost_2: vrednost_3:
naredbe_1;
break;
case vrednost_4: vrednost_5:
naredbe_2;
break;
default:
naredbe_d;
}Израз чија се вредност тестира може бити целобројног типа, али и типа
bool, типа string и набројивог типа
enum (о тим типовима биће више речи касније).